#include<iostream>
#include<unistd.h>
#include<signal.h>
#include <string>
#include <cstdlib>
using namespace std;
 
int main() {
  int sig = SIGSEGV;
  if (raise(sig) == -1) {
    perror("raise");
    return 1;
  }
  return 0;
}







// void Usage(string proc)
// {
//     cout << "Usage:\n\t" << proc << " signum pid\n\n";
// }
// void myhandler(int signo)
// {
//     cout << "process get a signal: " << signo <<endl;
//     // exit(1);
// }

// // mykill signum pid
// int main(int argc, char *argv[])
// {
    // signal(2, myhandler);
    //SIGABRT 是 Unix 和 Linux 系统中的一个信号，它的全名是 “Signal Abort”。这个信号通常由 abort() 函数生成，
    //用于表示一个严重的错误条件，通常是由于程序内部的逻辑错误。
    //当一个进程接收到 SIGABRT 信号时，它会被终止，并且会生成一个核心转储文件（如果系统配置允许）。
    //这个核心转储文件可以用于后续的调试，以确定导致进程终止的原因。

//     signal(SIGABRT, myhandler);
//     int cnt = 0;
//     while (true)
//     {
//         cout << "I am a process, pid: " << getpid() << endl;
//         sleep(1);
//         cnt++;
//         if(cnt % 2 == 0) 
//         {
//             kill(getpid(), 2);
//             raise(2);
//             abort();
//             kill(getpid(), 6);
//         }
//         if(argc != 3)
//         {
//             Usage(argv[0]);
//             exit(1);
//         }
//         int signum = stoi(argv[1]);
//         pid_t pid = stoi(argv[2]);

//         int n = kill(pid, signum);
//         if(n == -1)
//         {
//             perror("kill");
//             exit(2);
//         }
//     }
//     return 0;
// }

// void myhandler(int signo)
// {
//     cout << "process get a signal: " << signo <<endl;
// }

// int main()
// {
// // signal() 是 Unix 和 Linux 系统中的一个函数，它用于设置一个信号的处理函数。这个函数需要两个参数：信号 (int sig) 和处理函数 (void (*func)(int))。 
//         signal(i,myhandler);
//     while (1) 
//     {
//         printf("Running...\n");
//         sleep(1);
//     }
//     return 0;
// }